/**
 * 整数或者小数：^[-]+\.{,}[-]{,}$
只能输入数字："^[0-9]*$"。
只能输入n位的数字："^\d{n}$"。
只能输入至少n位的数字："^\d{n,}$"。
只能输入m~n位的数字：。"^\d{m,n}$"
只能输入零和非零开头的数字："^(0|[1-9][0-9]*)$"。
只能输入有两位小数的正实数："^[0-9]+(.[0-9]{2})?$"。
只能输入有1~3位小数的正实数："^[0-9]+(.[0-9]{1,3})?$"。
只能输入非零的正整数："^\+?[1-9][0-9]*$"。
只能输入非零的负整数："^\-[1-9][]0-9"*$。
只能输入长度为3的字符："^.{3}$"。
只能输入由26个英文字母组成的字符串："^[A-Za-z]+$"。
只能输入由26个大写英文字母组成的字符串："^[A-Z]+$"。
只能输入由26个小写英文字母组成的字符串："^[a-z]+$"。
只能输入由数字和26个英文字母组成的字符串："^[A-Za-z0-9]+$"。
只能输入由数字、26个英文字母或者下划线组成的字符串："^\w+$"。
验证用户密码："^[a-zA-Z]\w{5,17}$"正确格式为：以字母开头，长度在6~18之间，只能包含字符、数字和下划线。
验证是否含有^%&'',;=?$\"等字符："[^%&'',;=?$\x22]+"。
只能输入汉字："^[\u4e00-\u9fa5]{0,}$"
验证Email地址："^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
验证InternetURL："^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
验证电话号码："^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为："XXX-XXXXXXX"、"XXXX- XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
验证身份证号（15位或18位数字）："^\d{15}|\d{18}$"。
验证一年的12个月："^(0?[1-9]|1[0-2])$"正确格式为：""～""和""～""。
验证一个月的31天："^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为；""～""和""～""。整数或者小数：^[-]+\.{,}[-]{,}$
只能输入数字："^[0-9]*$"。
只能输入n位的数字："^\d{n}$"。
只能输入至少n位的数字："^\d{n,}$"。
只能输入m~n位的数字：。"^\d{m,n}$"
只能输入零和非零开头的数字："^(0|[1-9][0-9]*)$"。
只能输入有两位小数的正实数："^[0-9]+(.[0-9]{2})?$"。
只能输入有1~3位小数的正实数："^[0-9]+(.[0-9]{1,3})?$"。
只能输入非零的正整数："^\+?[1-9][0-9]*$"。
只能输入非零的负整数："^\-[1-9][]0-9"*$。
只能输入长度为3的字符："^.{3}$"。
只能输入由26个英文字母组成的字符串："^[A-Za-z]+$"。
只能输入由26个大写英文字母组成的字符串："^[A-Z]+$"。
只能输入由26个小写英文字母组成的字符串："^[a-z]+$"。
只能输入由数字和26个英文字母组成的字符串："^[A-Za-z0-9]+$"。
只能输入由数字、26个英文字母或者下划线组成的字符串："^\w+$"。
验证用户密码："^[a-zA-Z]\w{5,17}$"正确格式为：以字母开头，长度在6~18之间，只能包含字符、数字和下划线。
验证是否含有^%&'',;=?$\"等字符："[^%&'',;=?$\x22]+"。
只能输入汉字："^[\u4e00-\u9fa5]{0,}$"
验证Email地址："^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
验证InternetURL："^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
验证电话号码："^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为："XXX-XXXXXXX"、"XXXX- XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
验证身份证号（15位或18位数字）："^\d{15}|\d{18}$"。
验证一年的12个月："^(0?[1-9]|1[0-2])$"正确格式为：""～""和""～""。
验证一个月的31天："^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为；""～""和""～""。
 */

/**
 * 取字符串区间:
 */
export function strMatch(str: string, s: string, e: string) {
	let regs = new RegExp("(?<=[" + s + "]).*(?=[" + e + "])");
	return str.match(regs);
}
/**
 * 匹配整数
 * positive true=正整数, false=负整数， null=整数
 */
export function isInt(str: string, positive: boolean | undefined) {
	let match: RegExp;
	if (positive == true) {
		match = /^\d+$/;
	} else if (positive == false) {
		match = /^\d+$/;
	} else {
		match = /^-?\d+$/;
	}
	return match.test(str);
}
/**
 * 匹配数字
 * positive true=正整数, false=负整数， null=整数
 */
export function isNumber(str: string, positive: boolean | undefined) {
	let match: RegExp;
	if (positive == true) {
		match = /^\d*\.?\d+$/;
	} else if (positive == false) {
		match = /^-\d*\.?\d+$/;
	} else {
		match = /^-?\d*\.?\d+$/;
	}
	return match.test(str);
}

/**
 * 手机号
 */
export function isPhone(str: string) {
	let match = new RegExp(/^(13[0-9]{1}|14[5|7|9]{1}|15[0-3|5-9]{1}|166|17[0-3|5-8]{1}|18[0-9]{1}|19[8-9]{1}){1}\d{8}$/);
	return match.test(str);
}

/**
 * Email
 */
export function isEmail(str: string) {
	let match = new RegExp(/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{,})$/);
	return match.test(str);
}
/**
 * url
 */
export function isURI(str: string) {
	let match = new RegExp(/^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{,})([\/\w \.-]*)*\/?$/);
	return match.test(str);
}
/**
 * IPV4
 */
export function isIPV4(str: string) {
	let match = new RegExp(/^(?:(?:[-]|[-][-]|[]?[-][-]?)\.){}(?:[-]|[-][-]|[]?[-][-]?)$/);
	return match.test(str);
}

export function matchIp(str: string) {
	if (str.includes("localhost")) {
		return true;
	}
	let match = new RegExp(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/);
	return match.test(str);
}
/**
 * IPV4
 */
export function isDataSimple(str: string) {
	let match = new RegExp(/^\d{}(\-)\d{,}\\d{,}$/);
	return match.test(str);
}

/**
 * IPV4
 */
export function isData(str: string) {
	let match = new RegExp(
		/^(?:(?!)[-]{}-(?:(?:[-]|[-])-(?:[-]|[-]|[-])|(?:[-]|[-])-(?:|)|(?:[]|[])-)|(?:[-]{}(?:[]|[][]|[][])|(?:[]|[][]|[][]))--)$/
	);
	return match.test(str);
}

export function isQQ(str: string) {
	let match = new RegExp(/^[-][-]{,}$/);
	return match.test(str);
}

export function isWeixin(str: string) {
	let match = new RegExp(/^[a-zA-Z]([-_a-zA-Z0-]{,})+$/);
	return match.test(str);
}

export function isPlate(str: string) {
	let match = new RegExp(
		/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{}[A-Z]{}[A-Z0-]{}[A-Z0-9挂学警港澳]{}$/
	);
	return match.test(str);
}

export function isZn(str: string) {
	let match = new RegExp(/[\u4E00-\u9FA5]/);
	return match.test(str);
}

export function isDomain(str: string) {
	let match = new RegExp(/^([0-9a-zA-Z-]{1,}\.)+([a-zA-Z]{2,})$/);
	return match.test(str);
}

/**
 * Email
 */
export function isHexColor(str: string) {
	let match = new RegExp(/^#?([a-fA-F0-]{}|[a-fA-F0-]{})$/);
	return match.test(str);
}

/**
 * 身份证
 */
export function isIDCard(str: string) {
	let match = new RegExp(/^[-]\d{}(||([]\d))\d{}(([-])|(||))(([-][-])||||)\d{}[-9Xx]$/);
	return match.test(str);
}

/**
 * 用户名正则，4到16位（字母，数字，下划线，减号）
 */
export function isNsername(str: string) {
	let regs = new RegExp(/^[a-zA-Z0-9_-]{,}$/);
	return regs.test(str);
}

/**
 * 密码强度，最少6位，包括至少1个大写字母，1个小写字母，1个数字，1个特殊字符
 */
export function isPassword(str: string) {
	let regs = new RegExp(/^.*(?=.{,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/);
	return regs.test(str);
}
/**
 * url的正则表达式
 */
export function IsURL(str: string) {
	let strRegex =
		"^((https|http|ftp|rtsp|mms)?://)" +
		"?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" + //ftp的user@
		"(([0-9]{1,3}.){3}[0-9]{1,3}" + // IP形式的URL- 199.194.52.184
		"|" + // 允许IP和DOMAIN（域名）
		"([0-9a-z_!~*'()-]+.)*" + // 域名- www.
		"([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]." + // 二级域名
		"[a-z]{2,6})" + // first level domain- .com or .museum
		"(:[0-9]{1,4})?" + // 端口- :80
		"((/?)|" + // a slash isn't required if there is no file name
		"(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
	let re = new RegExp(strRegex);
	return re.test(str);
}
